package com.yaoli.ajob;

import java.util.LinkedList;
import java.util.List;

/**
 * 重要，拆分成两部分，返回这两个部分的所有可能值，使用计算两个集合的笛卡尔乘积
 *
 * 然后使用
 *
 * Created by siemens on 4/17/2017.
 */
public class _241_DifferentWaystoAddParentheses {
    public static void main(String[] args) {
        _241_DifferentWaystoAddParentheses differentWaystoAddParentheses = new _241_DifferentWaystoAddParentheses();
        differentWaystoAddParentheses.diffWaysToCompute("2*3");
    }

    /**
     * 递归方法，
     * @param input
     * @return
     */
    public List<Integer> diffWaysToCompute(String input) {
        List<Integer> ret = new LinkedList<Integer>();
        for (int i=0; i<input.length(); i++) {
            if (input.charAt(i) == '-' ||
                    input.charAt(i) == '*' ||
                    input.charAt(i) == '+' ) {
                String part1 = input.substring(0, i);
                String part2 = input.substring(i+1);
                List<Integer> part1Ret = diffWaysToCompute(part1);
                List<Integer> part2Ret = diffWaysToCompute(part2);
                for (Integer p1 :   part1Ret) {
                    for (Integer p2 :   part2Ret) {
                        int c = 0;
                        switch (input.charAt(i)) {
                            case '+': c = p1+p2;
                                break;
                            case '-': c = p1-p2;
                                break;
                            case '*': c = p1*p2;
                                break;
                        }
                        ret.add(c);
                    }
                }
            }
        }
        if (ret.size() == 0) {
            ret.add(Integer.valueOf(input));
        }
        return ret;
    }
}
